今天要來繼續介紹關於 NumPy 的應用。
資料型態、數學運算等等
| Type | 說明 | 
|---|---|
| bool | 布林值 | 
| int8 | 8 位元有號整數 | 
| int16 | 16 位元有號整數 | 
| int32 | 32 位元有號整數 | 
| int64 | 64 位元有號整數 | 
| uint8 | 8 位元無號整數 | 
| uint16 | 16 位元無號整數 | 
| uint32 | 32 位元無號整數 | 
| uint64 | 64 位元無號整數 | 
| float16 | 16 位元浮點數 | 
| float32 | 32 位元浮點數 | 
| float64 | 64 位元浮點數 | 
| complex64 | 64 位元複數 | 
| complex128 | 128 位元複數 | 
在新建一個 ndarray 後,可以指定這個矩陣裡面要存的資料的資料型別
import numpy as np
# 用字串指定 Datatype
x = np.array([1, 2, 3], dtype = 'uint8')
# 通過 np.datatype 指定
x = np.array([4, 5, 6], dtype = np.int16)
在建立好矩陣後,可以透過 astype() 將矩陣內元素的元素轉換型態。
x = np.array([1, 2, 3], dtype = 'uint8')
test = x.astype('float8')

array.T 這個函式來轉置矩陣array1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(array1)
#[[1 2 3]
# [4 5 6]
# [7 8 9]]
array1_T = array1.T
print(array1_T)
#[[1 4 7]
# [2 5 8]
# [3 6 9]]
array1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array2 = np.array([[10, 11, 12], [13, 14, 15], [16, 17, 18]])
print(array1 + array2)
# [[11 13 15]
#  [17 19 21]
#  [23 25 27]]
print(array1 - array2)
# [[-9 -9 -9]
#  [-9 -9 -9]
#  [-9 -9 -9]]
print(array1 * array2)
# [[ 10  22  36]
#  [ 52  70  90]
#  [112 136 162]]
print(array1 / array2)
# [[0.1        0.18181818 0.25      ]
#  [0.30769231 0.35714286 0.4       ]
#  [0.4375     0.47058824 0.5       ]]
這邊的 * 運算不是矩陣的內雞 dot 運算,是把同樣位置的元素乘起來而已。
若要計算矩陣的內積,要通過 np.dot() 來運算
print(np.dot(array1, array2))
#[[ 84  90  96]
# [201 216 231]
# [318 342 366]]
矩陣運算的兩個矩陣應該形狀要相同,才能運算。在 NumPy 中引入了廣播(broadcasting)的概念,用於當兩個矩陣的形狀不相等時,會自動補齊資料來讓運算可以繼續執行。
array1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array2 = array1 + 1
print(array2)
# [[ 2  3  4]
#  [ 5  6  7]
#  [ 8  9 10]]
這邊矩陣 array1 跟 1 相加,可以把 1 當作是一個 1x1 的矩陣,他被廣播成了 3x3,其他空格都用 1 來填充。
實際上他做的事情是
array1 + np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])
如果相加的兩個矩陣中,有其他一個維度一樣
array1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array3 = np.array([1, 2, 3])
print(array1 + array3)
# [[ 2  4  6]
#  [ 5  7  9]
#  [ 8 10 12]]
矩陣 array1 是一個 3x3 的矩陣,矩陣 array3 是一個 1x3 的矩陣,當他們有滿足某一個維度一樣,NumPy 會把 array3 的那一行廣播到變成三行。
待續...